package com.example.graduationdesign.service;

import com.example.graduationdesign.pojo.dao.ArticleDao;
import com.example.graduationdesign.pojo.dao.UserDao;
import com.example.graduationdesign.pojo.dao.WordDao;
import com.example.graduationdesign.pojo.dto.*;
import com.example.graduationdesign.pojo.vo.PageInfo;
import com.example.graduationdesign.pojo.vo.UserVo;

import java.util.List;

public interface AdminService {
    /**
     * 用于对学习者进行管理员的查看
     * @param pageNo
     * @param pageSize
     * @return
     */
    PageInfo<UserDao> SelectUser(Integer pageNo, Integer pageSize);


    /**
     * 用于对文章进行管理员的分页查看
     * @param pageNo
     * @param pageSize
     * @return
     */
    PageInfo<ArticleDao> SelectArticle(Integer pageNo,Integer pageSize);

    /**
     * 用于对单词进行管理者查看的分页功能
     * @param pageNo
     * @param pageSize
     * @return
     */
    PageInfo<WordDao> SelectWord(Integer pageNo, Integer pageSize);



    /**
     * 用于获取活跃用户数量
     * @return
     */
    Integer GetLiveStudent();


    /**
     * 获取今日打卡人数
     * @return
     */
    Integer GetCheckCount();

    /**
     * 用于管理员对文章的查询
     * @param articleId
     * @return
     */
    List<ArticleDao> SearchArticle(Long articleId);


    /**
     * 用于新增文章的内容
     * @param author
     * @param content
     * @param image
     * @param title
     * @return
     */
    Void InsertArticle(String author,String content,String image,String title);


    /**
     * 用于有图像修改的编辑中
     * @param code
     * @param author
     * @param content
     * @param image
     * @param title
     * @return
     */
    Void UpdateArticle1(Long code,String author,String content,String image,String title);


    /**
     * 用于无图像修改的编辑中
     * @param code
     * @param author
     * @param content
     * @param title
     * @return
     */
    Void UpdateArticle2(Long code,String author,String content,String title);


    /**
     * 用于删除文章
     * @param code
     * @return
     */
    Void DeleteArticle(Long code);


    /**
     * 用于获取用户的排名信息
     * @param stage
     * @return
     */
    List<RankDto> GetStudentRanking(Integer stage);


    /**
     * 用于管理员修改用户的基本信息
     * @param userId
     * @param sex
     * @param age
     * @param userName
     * @param phone
     * @param email
     * @return
     */
    Void UpdateUserInfo(Long userId,Integer sex,Integer age,String userName,String phone,String email);


    /**
     * 用于管理员逻辑删除用户
     * @param userId
     * @param isActive
     * @return
     */
    Void DeleteUserInfo(Long userId,Integer isActive);

    /**
     * 用于查询用户的基本信息
     * @param userId
     * @param userName
     * @return
     */
    List<UserDao> SearchUserInfo(Long userId, String userName);


    /**
     * 用于管理员对单词的修改
     * @param wordDao
     * @return
     */
    Void UpdateWordInfo(WordDao wordDao);


    /**
     * 用于管理员对单词的添加
     * @param wordDao
     * @return
     */
    Void AddWordInfo(WordDao wordDao);

    /**
     * 按单词查询
     * @param searchInput
     * @return
     */
    List<WordDao> SearchWordInfoByName(String searchInput);


    /**
     * 按单词阶段查询
     * @param searchInput
     * @return
     */
    List<WordDao> SearchWordInfoByStage(String searchInput);


    /**
     * 按单词难度查询
     * @param searchInput
     * @return
     */
    List<WordDao> SearchWordInfoByDifficulty(String searchInput);

    /**
     * 用于管理员获取用户行为数据
     * @param startDate
     * @param endDate
     * @return
     */
    DataAnalysisDto GetDataAnalysis(String startDate,String endDate);


    /**
     * 用于实现获取某个地区用户人数
     * @return
     */
    List<CityDto> GetCity();

    /**
     * 主要用于将文件中的单词数量批量添加至数据库中
     * @param wordDaos
     * @return
     */
    Integer SetData(List<WordDao> wordDaos);

    /**
     * 用于实现管理员获取验证码
     * @param email
     * @param newEmail
     * @return
     */
    String sendModifyAdminEmail(String email,String newEmail);

    /**
     * 用于修改管理员的邮箱
     * @param modifyAdminEmailDto
     * @return
     */
    Void updateAdminEmailInformation(ModifyAdminEmailDto modifyAdminEmailDto);

}
